#include <iostream>
#include <vector>
#include <list>
#include "getparam.h"

using namespace std;

template
<
    typename ... T
>
struct ForEach;

template
<
    typename T1,
    typename ... Types
>
struct ForEach<T1, Types ... >
    : ForEach<Types ... >
{
    template
    <
        typename S
    >
    void set(const S& s);
    
    template
    <
        typename S
    >
    void set<T1>(const T1& t)
    {
        instant = t;
    }
    
    template
    <
        typename S
    >
    S& get();
    
    template
    <
        typename S
    >
    T1 get<T1>()
    {
        return instant;
    }
    
private:

    GetParam<T1> instant;
};

template
<
    typename T
>
struct ForEach<T>
{
public:
};

int main()
{
    typedef ForEach< vector<int>, vector<double>, list<int> > Z;
    Z
};

